package common.web;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

import java.io.Serializable;

/**
 * 统一接口出参
 */

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class JsonResult<T> implements Serializable {

    /**
     * 状态码
     */
    Integer code;

    /**
     * 提示消息
     */
    String msg;

    /**
     * 数据
     */
     T data;


    public static JsonResult ok() {
        return JsonResult.ok(StatusCode.OK);
    }


    public static JsonResult ok(Object list) {
        JsonResult ok = JsonResult.ok(StatusCode.OK);
        ok.setData(list);
        return ok;
    }

    private static JsonResult ok(StatusCode statusCode) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode(StatusCode.OK.getCode()); //魔数
        jsonResult.setMsg(StatusCode.OK.getMsg());
        return jsonResult;
    }



    /**
     * 失败统一结果
     * @param code
     * @param msg
     * @return
     *
     * 40005 表示类别已经存在 没匹配上
     *
     */
    public static JsonResult fail(Integer code,String msg) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode(code);
        jsonResult.setMsg(msg);
        return jsonResult;
    }

    /**
     * 200 404 500
     * @param msg
     * @return
     */
    public static JsonResult fail(String msg) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode(StatusCode.ERROR.getCode());
        jsonResult.setMsg(msg);
        return jsonResult;
    }

    public static JsonResult fail(StatusCode statusCode) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode(statusCode.getCode());
        jsonResult.setMsg(statusCode.getMsg());
        return jsonResult;
    }
}
